package xyz.zyl2020.juc.lock.lock1;

import java.util.concurrent.TimeUnit;

/**
 * 问：如下代码，两个方法谁先输出？
 * 答：先输出 call，后 sendMsg
 * 原因：被 synchronized 修饰的方法，锁的对象是方法调用者，所以说这里两个方法调用的对象是同一个，先调用的先执行！
 */
public class Lock1 {

    public static void main(String[] args) throws InterruptedException {
        Phone phone = new Phone();

        new Thread(phone::call, "A").start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(phone::sendMsg, "B").start();
    }

}

class Phone {

    synchronized void call() {
        System.out.println("call");
    }

    synchronized void sendMsg() {
        System.out.println("sendMsg");
    }

}
